/*
  滑动组件
  Flutter中提出一个Sliver（中文为“薄片”的意思）概念，如果一个可滚动组件支持Sliver模型，
  那么该滚动可以将子组件分成好多个“薄片”（Sliver），只有当Sliver出现在视口中时才会去构建它，
  这种模型也称为“基于Sliver的延迟构建模型”。
 */

import 'package:flutter/material.dart';

void main() => runApp(MaterialApp(
      home: ScrollPage(),
    ));


class ScrollPage extends StatefulWidget {
  @override
  _ScrollPageState createState() => _ScrollPageState();
}

class _ScrollPageState extends State<ScrollPage> {

  final ScrollController _controller = ScrollController();

  @override
  void initState() {
    super.initState();
    // 设置监听
    _controller.addListener(() {

    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('ScrollView'),
      ),
      // 不支持基于Sliver的延迟实例化模型，所以如果预计视口可能包含超出屏幕尺寸太多的内容时，性能会很差
      body: SingleChildScrollView(
        controller: _controller,
        child: Column(
            children: List.generate(
                10, (index) => SizedBox(
                  height: 100,
                  child: ListTile(
                    leading: Icon(Icons.headset),
                    hoverColor: Colors.blueAccent,
                    title: Text('$index'),
                  ),
                ))),
      ),
      floatingActionButton: FloatingActionButton(
        child: Icon(Icons.add),
        onPressed: (){
          _controller.animateTo(5, duration: Duration(seconds: 1), curve: Curves.ease);
        },
      ),
    );
  }
}

